package com.xlf.pojo.base;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.util.List;

import com.xlf.pojo.mode.BaseEntity;
import com.xlf.pojo.vo.UserVO;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 *
 * @TableName problem
 */
@TableName(value ="problem")
@AllArgsConstructor
@NoArgsConstructor
@Builder
@Accessors(chain = true)
@Data
public class Problem extends BaseEntity implements Serializable {
    /**
     *
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 问题的自定义ID 例如（HOJ-1000）
     */
    private String problemId;


    @TableField(exist = false)
    private String problemIdPrefix;

    /**
     *
     */
    private String title;

    /**
     * 作者
     */
    private Long authorId;

    /**
     * 0为ACM,1为OI
     */
    private Integer type;

    /**
     * 单位ms
     */
    private Integer timeLimit;

    /**
     * 单位kb
     */
    private Integer memoryLimit;

    /**
     * 单位kb
     */
    private Integer stackLimit;

    /**
     *题目描述
     */
    private String description;

    /**
     *输入描述
     */
    private String input;

    /**
     *输出描述
     */
    private String output;

    /**
     * 题面样例
     */
    private String examples;
    /**
     * 提示
     */
    private String prompt;

    /**
     * 是否为vj判题
     */
    private Integer isRemote;

    /**
     *来源
     */
    private String source;

    /**
     * 外键，难度Id
     */
    private Long difficultyId;

    /**
     * 外键，题库Id
     */
    private Long problemTypeId;


    /**
     * 默认为0公开，1为私有，2为比赛题目
     */
    private Integer auth;

    /**
     * 当该题目为io题目时的分数
     */
    private Integer ioScore;

    /**
     * 该题目对应的相关提交代码，用户是否可用分享
     */
    private Integer codeShare;

    /**
     * 特判或交互程序的额外文件 json key：文件名 value：文件内容
     */
    private String judgeExtraFile;

    /**
     * 选手程序的额外文件 json key：文件名 value：文件内容
     */
    private String user_extra_file;
    /**
     * 题目评测模式,default、spj、interactive
     */
    private String judgeMode;

    /**
     * 题目样例评测模式,default,subtask_lowest,subtask_average
     */
    private String judgeCaseMode;

    /**
     * 是否默认去除用户代码的文末空格
     */
    private Integer isRemoveEndBlank;

    /**
     * 测试用例来源 0 ：数据库 1：文件
     */
    private Integer testCaseSource;

    /**
     * 是否默认开启该题目的测试样例结果查看
     */
    private Integer openCaseResult;

    /**
     * 状态
     */
    private Integer status;

    //关联表字段--------

    @TableField(exist = false)
    private String difficultyName;

    @TableField(exist = false)
    private String tagNames;

    @TableField(exist = false)
    private List<Long> tagIds;

    @TableField(exist = false)
    private List<Tag> tagList;

    @TableField(exist = false)
    private List<ProblemLanguage> problemLanguageList;

    @TableField(exist = false)
    private List<Language> languageList;

    @TableField(exist = false)
    private List<ProblemCase> problemCase;

    /**
     * 难度
     */
    @TableField(exist = false)
    private Difficulty difficulty;

    /**
     * 题库
     */
    @TableField(exist = false)
    private ProblemType problemType;

    @TableField(exist = false)
    private UserVO userVO;


    @TableField(exist = false)
    private static final long serialVersionUID = 1L;
}
